package com.fqj.myexcels.utils;

import com.fqj.myexcels.entity.ExcelRConfig;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>@Title  标题</p>
 * <p>@Description  描述</p>
 * <p>@Version 1.0.0 版本号</p>
 * <p>@author Fu qingjian 作者</p>
 * <p>@date 2017/8/22 创建日期</p>
 * <p>fuqingjian@dgg.net 作者的公司邮箱</p>
 * <p>Copyright © dgg group.All Rights Reserved. 版权信息</p>
 */
public class ExcelUtils {

    public static List<Map<String,String>> ExcelHandle(List<ExcelRConfig> excleRConfigs) throws IOException {

        //保存读取的数据
        List<Map<String,String>> rowList = rowList = new ArrayList<Map<String,String>>();

        for (ExcelRConfig excelRConfig:excleRConfigs) {
            //行和列都是从0开始
            String excelUri=excelRConfig.getExcelUri();

            //需要读取的sheet索引 索引从0开始
            int[] sheetNums=excelRConfig.getSheetNums();

            //读取开始行
            int startRow=excelRConfig.getStartRow();
            //读取结束行 -1没有结束行默认会读取到最后一行
            int endRow=excelRConfig.getEndRow();
            //读取的列索引 索引从0开始
            int[] colIndexs=excelRConfig.getColIndexs();
            //读取的列属性名 和列索引对应
            String[] colNames=excelRConfig.getColNames();

            XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(excelUri));
            for(int sheetNum=0;sheetNum<sheetNums.length;sheetNum++){
                //得到Excel工作表对象
                XSSFSheet sheet = wb.getSheetAt(sheetNum);
                if(sheet == null){
                    continue;
                }

                if(endRow==-1){
                    endRow= sheet.getLastRowNum();
                }

                //读取Row,从第二行开始
                for(int rowNum = startRow;rowNum <= endRow;rowNum++){
                    XSSFRow row = sheet.getRow(rowNum);
                    if(row!=null){
                        Map data=new HashMap<String,String>();
                        //读取列，从第一列开始
                        for(int colNum=0;colNum<colIndexs.length;colNum++){
                            XSSFCell cell = row.getCell(colIndexs[colNum]);
                            String value="";
                            if(cell==null){
                                continue;
                            }


                            if(cell.getCellTypeEnum()== CellType.NUMERIC){
                                DecimalFormat decimalFormat = new DecimalFormat("#");//格式化设置
                                value=decimalFormat.format(cell.getNumericCellValue());
                            }else if(cell.getCellTypeEnum()==CellType.STRING){
                                value=cell.getStringCellValue();
                            }


                            data.put(colNames[colNum],value);

                        }
                        rowList.add(data);
                    }
                }

            }

        }
        return rowList;


    }
}
